package com.jamila.scancode.exception;

import com.jamila.scancode.result.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @Description: 全局异常统一处理类
 * @CreateTime: 2024-03-30  22:08
 * @Author: JAMILA
 * @Version: 1.0
 */

@ControllerAdvice//通过AOP方式处理异常
public class GlobalExceptionHandler {
    /* 总结：执行顺序：特定异常--->全局异常
            手动抛出异常执行自定义异常*/

    /**
     *tips:
     * 异常处理顺序：1.特定异常；2.全局异常；3自定义异常
     * 说明：1.特定和全局异常基本上由系统自动抛出；自定义异常由用户手动抛出
     *      2.特定异常比全局异常更加精细，因此处理顺序排在全局异常前面
     *
     */

    //1.全局异常处理
    @ExceptionHandler(Exception.class)//异常处理器
    @ResponseBody//返回JSON格式数据
    public Result error(Exception e){
        e.printStackTrace();
        return Result.fail().message("执行了全局异常处理:"+e.getMessage());
    }

    //2.特定异常处理
    @ExceptionHandler(ArithmeticException.class)//异常处理器
    @ResponseBody//返回JSON格式数据
    public Result error(ArithmeticException e){
        e.printStackTrace();
        return Result.fail().message("执行了特定异常处理:"+e.getMessage());
    }

    //3.自定义异常处理
    @ExceptionHandler(JamilaException.class)//异常处理器
    @ResponseBody//返回JSON格式数据
    public Result error(JamilaException e){
        e.printStackTrace();
        return Result.fail().code(e.getCode()).message(e.getMessage());
    }

}
